Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
3 / 3
CRAP
100.00% covered (success)
100.00%
8 / 8
ResolveTargetRepositorySubscriber
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
3 / 3
4
100.00% covered (success)
100.00%
8 / 8
 getSubscribedEvents
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 addResolveTargetRepository
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
2 / 2
 loadClassMetadata
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
5 / 5
<?php
namespace Akeneo\Tool\Bundle\StorageUtilsBundle\EventSubscriber;
use Doctrine\Common\EventSubscriber;
use Doctrine\Common\Persistence\Event\LoadClassMetadataEventArgs;
/**
 * Mechanism to overwrite repository class without redefine class mapping
 *
 * @author    Romain Monceau <romain@akeneo.com>
 * @copyright 2014 Akeneo SAS (http://www.akeneo.com)
 * @license   http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
 */
class ResolveTargetRepositorySubscriber implements EventSubscriber
{
    /**
     * @staticvar array
     */
    protected static $resolveTargetRepo = [];
    /**
     * {@inheritdoc}
     */
    public function getSubscribedEvents()
    {
        return [
            'loadClassMetadata'
        ];
    }
    /**
     * Adds repository class for a class name
     *
     * @param string $object
     * @param string $newRepository
     */
    public function addResolveTargetRepository($object, $newRepository)
    {
        static::$resolveTargetRepo[ltrim($object)] = $newRepository;
    }
    /**
     * Processes event and resolves new object repository class
     *
     * @param LoadClassMetadataEventArgs $args
     */
    public function loadClassMetadata(LoadClassMetadataEventArgs $args)
    {
        $classMetadata = $args->getClassMetadata();
        $className = $classMetadata->getName();
        if (isset(static::$resolveTargetRepo[ltrim($className)])) {
            $classMetadata->customRepositoryClassName = static::$resolveTargetRepo[ltrim($className)];
        }
    }
}